<?php

class Application {

    //应用执行类外部执行方法
    public static function run() {
        //初始化框架
        self::_init_frame();
        //设置外部常量
        self::_set_const();
        //应用类的自动加载
        spl_autoload_register(array(__CLASS__, '_autoload'));
        //创建demo
        self::_create_demo();
        //执行应用类
        self::_app_run();
    }

    private static function _init_frame() {
        /**
         *   初始化框架（C函数初始化，时区初始化）
         */
        C(require HDPHP_CONFIG_PATH . '/Config.php');
        $file = APP_CONFIG_PATH . '/Config.php';
        $config = <<<data
<?php
	/**
	 *   用户配置项选项
	 */
	return array(
		//'配置项'=>'配置项值'
		);
?>

data;
        if (!is_file($file)) {
            file_put_contents($file, $config) || die('Access not allow!');
        }
        C(require $file);
        //读取综合配置项
        date_default_timezone_set('PRC');
        //设置默认时区
        C('SESSION_START') && session_start();
      
    }

    private static function _set_const() {
        // 设置外部常量 - 接口文件http路径
        define('__ROOT__', 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']);
        //设置框架http路径
        define('__FRAME__', dirname('__ROOT__'));
        $control = isset($_GET['c']) ? htmlspecialchars(ucfirst($_GET['c'])) : 'Index';
        //用户传入参数，选择使用哪个方法
        $method = isset($_GET['m']) ? htmlspecialchars($_GET['m']) : 'index';
        //定义Control和Method常量，以便调用
        define('CONTROL', $control);
        define('METHOD', $method);
        //定义TPL的http路径
        define('__TPL__', dirname(__ROOT__) . '/' . APP_NAME . '/Tpl');
        //定义Public的http路径
        define('__PUBLIC__', __TPL__ . '/Public');
        //定义bootstrap3框架的路径
        define('__BOOTSTRAP__', __PUBLIC__ . '/bootstrap');
        //本链接
        define('__SELF__', 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
    }

    private static function _autoload($class) {
        //实例化对象时，如果类不存在，会加载该类文件
        if (strlen($class) > 7 && substr($class, -7) == 'Control') {
            $path = APP_CONTROL_PATH . '/' . $class . '.class.php';
            if (!is_file($path))
                halt('控制器', $path);
        }else {
            $path = HDPHP_TOOLS_PATH . '/' . $class . '.class.php';
            if (!is_file($path))
                halt('扩展', $path);;
        }
        require $path;
    }

    private static function _create_demo() {
        //demo控制器路径
        $controlPath = APP_CONTROL_PATH . '/IndexControl.class.php';
        $control = <<<data
<?php 
class IndexControl extends Control{
	public function index(){
		header('Content-type:text/html;charset=utf-8');
		echo "<p style='font-size:40px;margin-left:50px;margin-top:50px;'>:） 欢迎使用HDPHP!</p>";
	}
}
?>
data;
        if (!is_file($controlPath)) {
            file_put_contents($controlPath, $control) || die('Access not allow!');
        }
    }

    private static function _app_run() {
        //用户传入参数，选择使用哪个控制器

        $control = CONTROL . 'Control';
        $method = METHOD;
        $obj = new $control();
        //实例化对象，调用该方法
        $obj->$method();
    }

}

?>